package com.sky.service;

import com.sky.dto.EmployeeDTO;
import com.sky.dto.EmployeeLoginDTO;
import com.sky.dto.EmployeePageQueryDTO;
import com.sky.dto.PasswordEditDTO;
import com.sky.entity.Employee;
import com.sky.result.PageResult;
import com.sky.vo.EmployeeLoginVO;

/**
 * @author bairimengchang
 * @version 1.0
 * @project sky-take-out
 * @description 员工管理业务接口
 * @date 2024/08/04 16:37:51
 */
public interface EmployeeService {

    /**
     * 员工登录
     * @param employeeLoginDTO 员工登录时传递的数据模型
     * @return 员工视图结果对象
     */
    EmployeeLoginVO login(EmployeeLoginDTO employeeLoginDTO);

    /**
     * 新增员工
     * @param employeeDTO 员工数据传输对象，包含新增员工的信息
     * @return 新增操作是否成功，返回 true 表示成功，false 表示失败
     */
    boolean addEmployee(EmployeeDTO employeeDTO);


    /**
     * 获取员工列表
     * @param employeePageQueryDTO 员工分页查询时传递的数据模型
     * @return 包含员工列表的分页结果对象
     */
    PageResult getEmployeeList(EmployeePageQueryDTO employeePageQueryDTO);

    /**
     * 修改员工账户启用状态
     * @param status 账号启用状态 1改成启用 2改成禁用
     * @param id 要进行修改状态的账号id
     * @return 修改操作是否成功，返回 true 表示成功，false 表示失败
     */
    boolean changeEmployeeStatus(Integer status, Long id);

    /**
     * 根据员工id查询员工详细信息
     * @param id 待查询的员工id
     * @return 返回符合条件的员工信息，没有则返回空员工对象
     */
    Employee getEmployeeById(Long id);

    /**
     * 根据传来的员工信息编辑员工
     * @param employeeDTO 员工数据传输数据模型
     * @return 编辑操作是否成功，返回 true 表示成功，false 表示失败
     */
    boolean editEmployee(EmployeeDTO employeeDTO);

    /**
     * 根据密码数据对象修改员工密码
     * @param passwordEditDTO 修改密码传输数据模型
     * @param token 封装了员工id的token字符串
     * @return 修改密码操作是否成功，返回 true 表示成功，false 表示失败
     */
    boolean changePassword(PasswordEditDTO passwordEditDTO, String token);
}
